# -*- coding: utf-8 -*-
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.safestring import SafeData, mark_safe
from django.utils.html import escape


register = template.Library()


def _add_p_tag(line, preprocessor):
    """ Вспомогательная функция добавления тега параграфа """
    if line:
        return u'<p>%s</p>' % preprocessor(line)
    return '<p>&nbsp;</p>'


def page_to_html(value, autoescape=None):
    """ Шаблонный фильтр, преобразует текст страницы в HTML """
    lines = value.splitlines()
    if not autoescape or isinstance(value, SafeData):
        lines = map(lambda l: _add_p_tag(l, lambda l: l), lines)
    else:
        lines = map(lambda l: _add_p_tag(l, lambda l: escape(l)), lines)
    return mark_safe(u'\n'.join(lines))


def multiline_to_html(value, autoescape=None):
    """ Шаблонный фильтр, преобразует многострочный текст в текст HTML с переносами <br/> """
    lines = value.splitlines()
    if autoescape and not isinstance(value, SafeData):
        lines = map(lambda l: escape(l), lines)
    return mark_safe(u'<br/>'.join(lines))


def mul(value, arg):
    """ Шаблонный фильтр, умножает значение на множитель """
    try:
        factor = int(arg)
        multiply = int(value)
        multiply -= 1
        if multiply < 0:
            multiply = 0
        return mark_safe(str(factor * multiply))
    except:
        pass
    return mark_safe(u'0')

page_to_html.is_safe = True
page_to_html.needs_autoescape = True
page_to_html = stringfilter(page_to_html)

multiline_to_html.is_safe = True
multiline_to_html.needs_autoescape = True
multiline_to_html = stringfilter(multiline_to_html)

mul.is_safe = True

register.filter('page_to_html', page_to_html)
register.filter('multiline_to_html', multiline_to_html)
register.filter('mul', mul)
